14. 读取Excel文件

Excel在金融数据交换中的地位

尽管Python和数据库在金融分析中日益重要,Excel仍然是不可替代的工具:

  • 数据交换:数据源和报告的标准格式
  • 人工输入:交易员和分析师的常用工具
  • 遗留系统:许多老系统仍使用Excel

本节学习如何用 pandas 高效读取Excel文件。

read_excel 函数:基础用法

pd.read_excel() 是 Pandas 读取 Excel 文件的核心函数。

基本语法:

df = pd.read_excel(
    'stores.xlsx',       # 文件路径
    sheet_name='2019',   # 工作表名称
    skiprows=1,          # 跳过前1行
    usecols='B:F'        # 只读取B到F列
)

返回一个 DataFrame 对象,可直接用于后续分析。

read_excel 常用参数详解

参数 说明 示例
sheet_name 工作表名或索引 'Sheet1'0
skiprows 跳过的行数 1
usecols 读取的列范围 'B:F' 或列名列表
dtype 指定列的数据类型 {'价格': float}
converters 列转换函数字典 {'Flagship': fix_missing}
nrows 只读取前N行 100

⭐ 平台任务:读取Excel并处理缺失值

Listing 1
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
# 注:stores.xlsx数据文件本地没有,但平台已经内置
import pandas as pd  # 导入Pandas数据分析库

df = pd.read_excel("stores.xlsx",sheet_name="2019", skiprows=1, usecols="B:F")  # 从Excel文件读取数据存入df
print(df.info())  # 输出数据框基本信息

def fix_missing(x):  # 定义函数fix_missing
  return False if x in ["", "MISSING"] else x  # 返回计算结果

# 从Excel文件读取数据存入df2
df2 = pd.read_excel("stores.xlsx",sheet_name="2019", skiprows=1, usecols="B:F",converters={"Flagship": fix_missing})
print(df2.info())  # 输出数据框基本信息
print(df2)  # 输出数据框数据

with pd.ExcelFile("stores.xlsx") as f:  # 使用上下文管理器
  # 从Excel文件读取数据存入data1
  data1 = pd.read_excel(f, "2019", skiprows=1, usecols="B:F", nrows=2,converters={"Flagship": fix_missing})
  # 从Excel文件读取数据存入data2
  data2 = pd.read_excel(f, "2020", skiprows=1, usecols="B:F", nrows=2,converters={"Flagship": fix_missing})

print(data1)  # 输出数据数据

代码解读:基础读取

import pandas as pd

df = pd.read_excel(
    'stores.xlsx',
    sheet_name='2019',
    skiprows=1,
    usecols='B:F'
)
print(df.info())
  • stores.xlsx2019 工作表读取数据
  • 跳过第1行(通常是标题或说明行)
  • 只读取 B 到 F 列

代码解读:converters 参数处理脏数据

def fix_missing(x):
    return False if x in ['', 'MISSING'] else x

df2 = pd.read_excel(
    'stores.xlsx',
    sheet_name='2019',
    skiprows=1,
    usecols='B:F',
    converters={'Flagship': fix_missing}
)
  • 定义 fix_missing 函数:将空字符串和 'MISSING' 替换为 False
  • converters 参数在读取时就完成数据清洗

代码解读:ExcelFile 类读取多个工作表

with pd.ExcelFile('stores.xlsx') as f:
    data1 = pd.read_excel(
        f, '2019', skiprows=1,
        usecols='B:F', nrows=2,
        converters={'Flagship': fix_missing}
    )
    data2 = pd.read_excel(
        f, '2020', skiprows=1,
        usecols='B:F', nrows=2,
        converters={'Flagship': fix_missing}
    )
  • ExcelFile 只打开文件一次,多次读取不同工作表
  • nrows=2 限制只读取前2行(用于快速预览)

ExcelFile 类的优势

使用 ExcelFile 类而非多次调用 read_excel 的三大优势:

  • 只打开文件一次:避免多次 I/O 操作,提升效率
  • 适合读取多个工作表:同一文件中的多年数据、多个子公司报表
  • 自动管理文件句柄with 语句确保文件使用后自动关闭

本节小结

方法 适用场景
pd.read_excel() 读取单个工作表
converters 参数 读取时清洗脏数据
pd.ExcelFile() 高效读取同一文件的多个工作表

核心要点

  • read_excel 是读取 Excel 的核心函数
  • converters 可在读取阶段完成数据清洗
  • 多工作表场景优先使用 ExcelFile